package com.qlk.odcinterface.manager.impl;

import java.util.List;

import com.qlk.common.manager.BaseManager;
import com.qlk.common.utils.page.PageUtil;
import com.qlk.odcinterface.domain.PmsCoupon;
import com.qlk.odcinterface.domain.PmsCouponChannel;
import com.qlk.odcinterface.domain.PmsCouponItem;
import com.qlk.odcinterface.domain.query.PmsCouponChannelQuery;
import com.qlk.odcinterface.domain.query.PmsCouponItemQuery;
import com.qlk.odcinterface.domain.query.PmsCouponQuery;
import com.qlk.odcinterface.dao.PmsCouponChannelDao;
import com.qlk.odcinterface.dao.PmsCouponDao;
import com.qlk.odcinterface.dao.PmsCouponItemDao;
import com.qlk.odcinterface.manager.PmsCouponManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * PmsCouponManager接口的实现类
 * 
 * @author zhaoyanan
 * @version 2016-4-14 14:11:36
 * 
 */
@Component
public class PmsCouponManagerImpl extends BaseManager implements PmsCouponManager {
	
    @Autowired
    private PmsCouponDao pmsCouponDao;
    
    @Autowired
    private PmsCouponItemDao pmsCouponItemDao;
    
    @Autowired
    private PmsCouponChannelDao pmsCouponChannelDao;

    /**
     * {@inheritDoc}
     */
    public boolean insert(final List<PmsCoupon> pmsCouponList) {
        boolean resultFlag = false;
        if (null != pmsCouponList && pmsCouponList.size() > 0) {
            for (PmsCoupon pmsCoupon : pmsCouponList) {
                resultFlag = pmsCouponDao.insert(pmsCoupon);
                if (!resultFlag) {
                    throw new RuntimeException("批量新增表信息异常");
                }
            }
        }

        return resultFlag;
    }

    /**
     * {@inheritDoc}
     */
    public boolean insert(PmsCoupon pmsCoupon) {
        return pmsCouponDao.insert(pmsCoupon);
    }

    /**
     * {@inheritDoc}
     */
    public boolean update(final PmsCoupon pmsCoupon) {
        return pmsCouponDao.update(pmsCoupon);
    }

    /**
     * {@inheritDoc}
     */
    public List<PmsCoupon> queryPmsCouponList(PmsCouponQuery queryBean) {
        return pmsCouponDao.queryPmsCouponList(queryBean);
    }

    /**
     * {@inheritDoc}
     */
    public List<PmsCoupon> queryPmsCouponListWithPage(PmsCouponQuery queryBean,
            PageUtil pageUtil) {
        if (null == queryBean) {
            queryBean = new PmsCouponQuery();
        }

        // 查询总数
        int totalItem = queryPmsCouponCount(queryBean);

        if (pageUtil == null) {
            pageUtil = new PageUtil();
        }
        pageUtil.setTotalRow(totalItem);
        pageUtil.init();
        
        if (totalItem > 0) {
            queryBean.setPageIndex(pageUtil.getCurPage());
            queryBean.setPageSize(pageUtil.getPageSize());
            // 调用Dao翻页方法
            return pmsCouponDao.queryPmsCouponListWithPage(queryBean);
        }
        return null;
    }

    /**
     * {@inheritDoc}
     */
    public int queryPmsCouponCount(PmsCouponQuery queryBean) {
        return pmsCouponDao.queryPmsCouponCount(queryBean);
    }

    /**
     * {@inheritDoc}
     */
    public boolean delete(PmsCoupon pmsCoupon) {
        return pmsCouponDao.delete(pmsCoupon);
    }

    /**
     * {@inheritDoc}
     */
    public PmsCoupon getPmsCouponById(Long id) {
        return pmsCouponDao.getPmsCouponById(id);
    }

    /**
     * {@inheritDoc}
     */
    public boolean delete(final PmsCoupon[] pmsCoupons) {
        boolean resultFlag = false;
        if (null != pmsCoupons && pmsCoupons.length > 0) {
            for (int i = 0; i < pmsCoupons.length; i++) {
                resultFlag = delete(pmsCoupons[i]);
                if (!resultFlag) {
                    throw new RuntimeException("批量删除表信息异常!");
                }
            }
        }

        return resultFlag;
    }

    /**
     * {@inheritDoc}
     */
    public boolean exist(PmsCoupon pmsCoupon) {
        return pmsCouponDao.exist(pmsCoupon);
    }

	public boolean insertPmsCoupon(List<PmsCouponItem> items, PmsCoupon pmsCoupon, List<PmsCouponChannel> channels) {
		//插入主表信息
		boolean flag = pmsCouponDao.insert(pmsCoupon);
		if(!flag) throw new RuntimeException("odc优惠券"+pmsCoupon.getCode()+"主表信息插入失败！");
		
		//插入优惠券明细表信息
		for(PmsCouponItem item : items){
			flag = pmsCouponItemDao.insert(item);
			if(!flag) throw new RuntimeException("odc优惠券"+pmsCoupon.getCode()+"明细信息插入失败！");
		}
		
		//插入优惠券渠道表信息
		for(PmsCouponChannel channel : channels){
			flag = pmsCouponChannelDao.insert(channel);
			if(!flag) throw new RuntimeException("odc优惠券"+pmsCoupon.getCode()+"渠道信息插入失败！");
		}
		
		return true;
	}

	public boolean updatePmsCoupon(List<PmsCouponItem> items, PmsCoupon pmsCoupon, List<PmsCouponChannel> channels,PmsCoupon oldCoupon) {
		boolean flag = false;
		
		//删除已存在优惠券信息
		flag = pmsCouponDao.delete(oldCoupon);
		if(!flag) throw new RuntimeException("odc已存在优惠券"+oldCoupon.getCode()+"主表信息删除失败！");
		
		//根据促销ID删除已存在优惠券明细信息
		PmsCouponItem pmsCouponItem = new PmsCouponItem();
		pmsCouponItem.setPromotionId(oldCoupon.getId().intValue());
		flag = pmsCouponItemDao.delete(pmsCouponItem);
		if(!flag) throw new RuntimeException("odc已存在优惠券"+oldCoupon.getCode()+"明细信息删除失败！");
		
		//根据促销ID删除已存在优惠券渠道信息
		PmsCouponChannel pmsCouponChannel = new PmsCouponChannel();
		pmsCouponChannel.setPromotionId(oldCoupon.getId().intValue());
		flag = pmsCouponChannelDao.delete(pmsCouponChannel);
		if(!flag) throw new RuntimeException("odc已存在优惠券"+oldCoupon.getCode()+"渠道信息删除失败！");
		
		//插入即将更新优惠券信息
		flag = insertPmsCoupon(items, pmsCoupon, channels);
		
		return flag;
	}

	public boolean updatePmsCouponStatus(PmsCoupon pmsCoupon) {
		
		return pmsCouponDao.updatePmsCouponStatus(pmsCoupon);
	}

	@Override
	public boolean updateDeleteAt(PmsCoupon pmsCoupon) {
		
		return pmsCouponDao.updateDeleteAt(pmsCoupon);
	}

}
